#define _CRT_SECURE_NO_WARNINGS

#include<iostream>
using namespace std;

//template<typename T>
//void Swap(T& x, T& y) {
//	T tmp = x;
//	x = y;
//	y = tmp;
//}
////void func(auto x) {
////
////}
//int main() {
//
//
//	//auto x = 0;
//	//auto y = 3.3;
//
//	int a = 1;
//	int b = 2;
//	double c = 1.1;
//	double d = 2.2;
//	Swap(a, b);
//	Swap(c, d);
//	cout << a << ' '<< b << endl;
//	cout << c << ' '<< d << endl;
//	return 0;
//}
//
//template <class T1, class T2>
//void func(const T1& x, const T1& y) {
//	cout << x << endl;
//	cout << y << endl;
//}
//int main() {
//	func(1, 1);
//	func(2.2, 2.2);
//	return 0;
//}
//
//template<class T>
//T*& func(int n) {
//	T* ptr = new T[n];
//	return ptr;
//}
//
//int main() {
//	int* p1 = func<int>(10);
//	return 0;
//}

//template<class T>
//void Swap(T x, T y) {
//	T tmp = x;
//	x = y;
//	y = tmp;
//}07813B1h

//void Swap(int x, int y) {
//	int tmp = x;
//	x = y;
//	y = tmp;
//}
//int main() {
//	double a = 1.1;
//	double b = 2.2;
//	Swap(a, b);
//	return 0;
//}

//template<class T>
//class stack {
//public:
//	stack(int n = 4);
//private:
//	T* _a;
//	int _top;
//	int _capacity;
//};
//
//template<class T>
//stack<T>::stack(int n) {
//	_a = new T[n];
//	_top = 0;
//	_capacity = n;
//}
//int main() {
//	stack<int>st1;
//	stack<double>st2;
//	return 0;
//}
#include<vector>
class Solution {
public:
	int rob(vector<int>& nums) {
		int n = nums.size();
		if (n == 1) return nums[0];
		vector<int>f1(n);
		auto g1 = f1;
		f1[0] = nums[0];
		for (int i = 1; i < n; i++) {
			f1[i] = g1[i - 1] + nums[i];
			g1[i] = max(f1[i - 1], g1[i - 1]);
		}
		vector<int>f(n - 1);
		auto g = f;
		f[0] = nums[1];
		for (int i = 1; i < n - 1; i++) {
			f[i] = g[i - 1] + nums[i + 1];
			g[i] = max(f[i - 1], g[i - 1]);
		}
		return max(g1[n - 1], f[n - 2]);
	}
};

int main() {
	vector<int>a(5);
	a[0] = 1;
	a[1] = 9;
	a[2] = 1;
	a[3] = 9;
	a[4] = 1;
	Solution m;
	int ret = m.rob(a);
	cout << ret << endl;
	return 0;
}